package com.sikaryofficial.system.service;

import com.sikaryofficial.system.api.model.ManualExportReq;
import com.sikaryofficial.system.api.model.user.UserDailyDTO;
import com.sikaryofficial.system.api.model.user.UserRegisterDTO;
import com.sikaryofficial.system.domain.dto.TrendDTO;
import com.sikaryofficial.system.domain.dto.TrendReq;
import com.sikaryofficial.system.domain.vo.ReportTrendVO;

import java.util.Date;
import java.util.List;

/**
 * 新增注册人数日数据Service接口
 *
 * @author qinjinyuan
 * @date 2024-04-07
 */
public interface ISysRegisterDailyService {
    /**
     * @param req
     * @return
     */
    List<TrendDTO> getDailyByDate(TrendReq req);

    /**
     * @param req
     * @return
     */
    Long countDailyByDate(TrendReq req);

    /**
     * @param startDate
     * @param endDate   当前时间
     * @return
     */
    List<ReportTrendVO> queryDaily(Date startDate, Date endDate);

    /**
     * @param startDate 上周星期1
     * @param endDate   当前时间
     * @return
     */
    List<ReportTrendVO> queryWeekly(Date startDate, Date endDate);

    /**
     * @param startDate 获取上个月的第一天
     * @param endDate   当前时间
     * @return
     */
    List<ReportTrendVO> queryMonthly(Date startDate, Date endDate);

    /**
     * @param startDate 今年的第1天
     * @param endDate   当前时间
     * @return
     */
    List<ReportTrendVO> queryQuarterly(Date startDate, Date endDate);

    /**
     * @param startDate 去年的第1天
     * @param endDate   当前时间
     * @return
     */
    List<ReportTrendVO> queryYearly(Date startDate, Date endDate);

    /**
     * 更新日数据
     */
    int saveOrUpdateDaily(Date genDate, Long subTotal,Long userId);

    /**
     * 更新周数据
     */
    int saveOrUpdateWeekly(Integer weekNum, Long subTotal);

    /**
     * 更新年数据
     */
    int saveOrUpdateMonthly(Date genDate, Long subTotal);

    /**
     * 更新季度数据
     */
    int saveOrUpdateQuarterly(Integer quarterNum, Long subTotal);

    /**
     * 更新年数据
     */
    int saveOrUpdateYearly(Date genDate, Long subTotal);

    /**
     * 查询日数据
     * @param req
     * @return
     */
    List<UserRegisterDTO> queryRegisterDailyByTime(ManualExportReq req);
}
